
package banco_imobiliario.dao;

import banco_imobiliario.model.Empresa;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

/**
 *
 * @author alessandro
 */
public class EmpresaDAOImpl implements EmpresaDAO{

    
    private Connection conexaoBanco = null;
    private PreparedStatement preparedStatement = null;
    private ResultSet resultadoConsulta = null;
    
    @Override
    public void insertEmpresa(Empresa empresa) {
       
       String sqlQuery = "INSERT INTO empresa (nome, multiplicador, hipoteca, valor) VALUES (?,?,?,?)"; 
		
        try {
            
            conexaoBanco = DAOConection.getConnection();
            preparedStatement = conexaoBanco.prepareStatement(sqlQuery);

            preparedStatement.setString(1, empresa.getNome());
            preparedStatement.setInt(2, empresa.getIndiceMultiplicador());
            preparedStatement.setInt(3, (int)empresa.getHipoteca());
            preparedStatement.setInt(4, (int)empresa.getPreco());

            preparedStatement.execute();

            preparedStatement.close();
            conexaoBanco.close();

        } catch (SQLException e) {
                System.out.println("Erro ao inserir nova empresa: " + e);
        }         
        
    }

    @Override
    public void updateEmpresa(Empresa empresa) {
        
         String sqlQuery = "UPDATE empresa SET nome = ?, multiplicador = ?, hipoteca = ?, valor = ? " +
                                          "WHERE id = ?"; 

        try {

            conexaoBanco = DAOConection.getConnection();
            preparedStatement = conexaoBanco.prepareStatement(sqlQuery);

            preparedStatement.setString(1, empresa.getNome());
            preparedStatement.setInt(2, empresa.getIndiceMultiplicador());
            preparedStatement.setInt(3, (int)empresa.getHipoteca());
            preparedStatement.setInt(4, (int)empresa.getPreco());
            preparedStatement.setInt(5, empresa.getId());

            preparedStatement.executeUpdate();

            preparedStatement.close();
            conexaoBanco.close();

        } catch (SQLException e) {
                System.out.println("Erro ao atualizar empresa: " + e);
        }
        
    }

    @Override
    public void deleteEmpresa(int id) {
         
        String sqlQuery = "DELETE FROM empresa WHERE id = ?"; 

        try {

            conexaoBanco = DAOConection.getConnection();
            preparedStatement = conexaoBanco.prepareStatement(sqlQuery);

            preparedStatement.setInt(1, id);

            preparedStatement.execute();

            preparedStatement.close();
            conexaoBanco.close();

        } catch (SQLException e) {
                System.out.println("Erro ao deletar empresa: " + e);
        }
         
    }

    @Override
    public ArrayList<Empresa> getAllEmpresas() {
        
        Empresa empresa = null;
        ArrayList<Empresa> empresas = new ArrayList<>();
        String sqlQuery = "SELECT id, nome, multiplicador, hipoteca, valor, indice FROM empresa";


        try {

            conexaoBanco = DAOConection.getConnection();
            preparedStatement = conexaoBanco.prepareStatement(sqlQuery);

            resultadoConsulta = preparedStatement.executeQuery();

            while(resultadoConsulta.next()){

                empresa = new Empresa();

                empresa.setId( Integer.valueOf(resultadoConsulta.getString("id")) );
                empresa.setNome( resultadoConsulta.getString("nome") );
                empresa.setIndiceMultiplicador( Integer.valueOf(resultadoConsulta.getString("multiplicador")) );
                empresa.setHipoteca( Integer.valueOf(resultadoConsulta.getString("hipoteca")) );
                empresa.setPreco(Integer.valueOf(resultadoConsulta.getString("valor")) );
                empresa.setIndice(Integer.valueOf(resultadoConsulta.getString("indice")) );

                empresas.add(empresa);

            }

            preparedStatement.close();
            conexaoBanco.close();


        } catch (SQLException e) {
                System.out.println("Erro ao realizar o select na tabela empresa: " + e);
        }

        
        return empresas;
    }

    @Override
    public Empresa buscarEmpresa(int id) {
         
        Empresa empresa = new Empresa();
        
        String sqlQuery = "SELECT id, nome, multiplicador, hipoteca, valor, indice FROM empresa WHERE indice = ?";


        try {

            conexaoBanco = DAOConection.getConnection();
            preparedStatement = conexaoBanco.prepareStatement(sqlQuery);
            preparedStatement.setInt(1, id);
            resultadoConsulta = preparedStatement.executeQuery();

            while(resultadoConsulta.next()){

                

                empresa.setId( Integer.valueOf(resultadoConsulta.getString("id")) );
                empresa.setNome( resultadoConsulta.getString("nome") );
                empresa.setIndiceMultiplicador( Integer.valueOf(resultadoConsulta.getString("multiplicador")) );
                empresa.setHipoteca( Integer.valueOf(resultadoConsulta.getString("hipoteca")) );
                empresa.setPreco(Integer.valueOf(resultadoConsulta.getString("valor")) );
                empresa.setIndice(Integer.valueOf(resultadoConsulta.getString("indice")) );

                

            }

            preparedStatement.close();
            conexaoBanco.close();


        } catch (SQLException e) {
                System.out.println("Erro ao realizar o select na tabela empresa: " + e);
        }

        
        return empresa;
    }

    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
}
